/*
 * vim:foldmethod=marker:
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#define N_MAX 100

int
main(void)
{
	static int AM[N_MAX][N_MAX];
	int n, i, j, a = 1, k;

	scanf("%d", &n);
	for (i=0;i<n;i++)
		for (j =0; j<n;j++)
			scanf("%d", &AM[i][j]);
	for (i=0;i<n;i++) {
		for (j=0;j<n;j++) {
			if (AM[i][j]) {
				for (k=j+1; k < n; k++) {
					if (!(AM[j][k] && AM[i][k])) {
						puts("NO");
						return 0;
					}
				}
			}
		}
	}
	puts("YES");
	return 0;
}
